package br.eng.eliseu.gwt.gestaoWeb.client.ui.site.login;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import br.eng.eliseu.gwt.gestaoWeb.model.enums.SistemasEnum;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.text.shared.Renderer;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ValueListBox;
import com.google.gwt.user.client.ui.Widget;

public class LoginView extends Composite implements LoginPresenter.Display{

	private static LoginViewUiBinder uiBinder = GWT.create(LoginViewUiBinder.class);
	interface LoginViewUiBinder extends UiBinder<Widget, LoginView> {}
	
	@UiField TextBox usuarioTBox;
	@UiField PasswordTextBox senhaTBox;
	@UiField Label empresaLabel;
	@UiField (provided = true) ValueListBox<LoginEmpresaSistemaStruts> empresaLBox;
	@UiField Label sistemaLabel;
	@UiField (provided = true) ValueListBox<SistemasEnum> sistemaLBox;
	@UiField Button entrarButton;
	@UiField Button cancelarButton;


	public LoginView() {
		// --- Controi ValueListBox <Empresa>
		empresaLBox = new ValueListBox<LoginEmpresaSistemaStruts>(new Renderer<LoginEmpresaSistemaStruts>() {
			public String render(LoginEmpresaSistemaStruts value) {
				String s = "";
				if (value != null) {
					s = value.getEmpresa().getNome();
				}
				return s;
			}

			public void render(LoginEmpresaSistemaStruts value, Appendable appendable) throws IOException {
				String s = render(value);
				appendable.append(s);
			}
		});
		// --- Controi ValueListBox <SistemasEnum>
		sistemaLBox = new ValueListBox<SistemasEnum>(new Renderer<SistemasEnum>() {
			public String render(SistemasEnum value) {
				String s = "";
				if (value != null) {
					s = value.getNome();
				}
				return s;
			}

			public void render(SistemasEnum value, Appendable appendable) throws IOException {
				String s = render(value);
				appendable.append(s);
			}
		});

		initWidget(uiBinder.createAndBindUi(this));
		
		cancelaButton();
		bind();
	}

	public void bind() {
		// --- Evendo de mudanca de estado do comboPais
		empresaLBox.addValueChangeHandler(new ValueChangeHandler<LoginEmpresaSistemaStruts>(){
			public void onValueChange(ValueChangeEvent<LoginEmpresaSistemaStruts> event) {
				populaSistemaLBox(null);
				populaSistemaLBox(event.getValue().getSistemasList());
			}
	    });
	}	
	public Widget asWidget() {
		return this;
	}


	
	// --- Aqui usamos HasValue<String> para o view ser bem generico 
	public TextBox getUsuarioTBox() {
		return usuarioTBox;
	}
	public PasswordTextBox getSenhaTBox() {
		return senhaTBox;
	}

	public ValueListBox<LoginEmpresaSistemaStruts> getEmpresaLBox() {
		return empresaLBox;
	}
	public void populaEmpresaLBox( List<LoginEmpresaSistemaStruts> lista){
		if (lista==null){
			getEmpresaLBox().setValue(null);
			lista = new ArrayList<LoginEmpresaSistemaStruts>();
		}
		getEmpresaLBox().setAcceptableValues(lista);
	}


	public ValueListBox<SistemasEnum> getSistemaLBox() {
		return sistemaLBox;
	}
	public void populaSistemaLBox( List<SistemasEnum> lista){
		if (lista==null){
			sistemaLBox.setValue(null);
			lista = new ArrayList<SistemasEnum>();
		}
		sistemaLBox.setAcceptableValues(lista);
	}

	
	public HasClickHandlers getEntrarButton() {
		return entrarButton;
	}


	public void showMessage(String message) {
	}
	public void showError(String message) {
	}
	public void showWaitMessage(boolean b) {
	}

	@UiHandler("cancelarButton")
	void onCancelarButtonClick(ClickEvent event) {
		cancelaButton();
	}
	
	public void cancelaButton(){
		usuarioTBox.setEnabled(true);
		senhaTBox.setEnabled(true);
		populaEmpresaLBox(null);
		populaSistemaLBox(null);
		setVisibleComplemento(false);
	}
	
	public void setVisibleComplemento( Boolean visible ){
		empresaLabel.setVisible(visible);
		empresaLBox.setVisible(visible);
		sistemaLabel.setVisible(visible);
		sistemaLBox.setVisible(visible);
		
	}
}
